package cn.s1995.sloth.bizs.constant;

/**
 * RegCst
 *
 * @Author penf
 * @Description 正则常量
 * @Date 2022/10/27 15:31
 */
public class RegCst {

    /**
     * 密码
     * 6-16位数字+字母或符号
     */
    public static final String PASSWORD = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z+&@#/%?=~_|!:,.;]{6,20}$";

    /**
     * 邮箱
     *
     */
    public static final String EMAIL = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";

    /**
     * 验证码
     */
    public static final String VERIFICATION_CODE = "^\\d{4,6}$";


    /**
     * 邀请码
     */
    public static final String INVITATION_CODE = "^\\w{1,10}$";

    /**
     * 手机
     */
    public static final String PHONE = "\\d{6,20}";

    /**
     * 手机
     */
    public static final String MOBILE = "^1\\d{10}$";

    /**
     * 电话
     */
    public static final String TEL = "^([0-9]{3,4}-)?[0-9]{7,8}$";

    /**
     * 手机和电话
     */
    public static final String MOBILE_AND_TEL = "((^1[0-9]{10}$)|(^([0-9]{3,4}-)?[0-9]{7,8}$))";

    /**
     * 车牌号码的正则表达式
     * <p>
     * 常规车牌号：省份+地区代码+五位数字/大写英文字母（序号位）如：粤B12345。
     * 1. 序号位不存在字母I和O防止1、0混淆
     * 2. 省份范围：京、津、沪、渝、冀、豫、云、辽、黑、湘、皖、鲁、新、苏、浙、赣、鄂、桂、甘、晋、蒙、陕、吉、闽、贵、粤、青、藏、川、宁、琼。
     * 3. 地区代码O为省级公安厅专用车牌
     * 4. 地区代码U为省级政府专用车牌
     * 5. 地区代码中暂无I
     * </p>
     *
     * <p>
     * 新能源车牌号：省份简称（1位汉字）+发牌机关代号（1位字母）+序号（6位）
     * 1. 小型新能源汽车号牌（序号）的第一位必须使用字母D、F（D代表纯电动新能源汽车，F代表非纯电动新能源汽车），第二位可以使用字母或者数字，后四位必须使用数字。
     * 2. 大型新能源汽车号牌（序号）的第六位必须使用字母D、F（D代表纯电动新能源汽车，F代表非纯电动新能源汽车），前五位必须使用数字。
     * 3. 序号中英文字母I和O不能使用。
     * 4. 省份范围同常规车牌号
     * 5. 发牌机关代码暂无I
     * </p>
     *
     * <p>
     * 警车车牌：车牌最后汉字为警字
     * 1. 省份+地区代码+4位数字+警（川A0001警）
     * 2. 省份+地区代码+字母+3位数字（川AA001警）字母可选项包括（A、B、C、D）
     * 3. 省份范围同常规车牌号
     * 4. 地区代码没有I
     * 5. 地区代码为O时代表为省级公安厅专用车牌
     * </p>
     *
     * <p>
     * 领事馆车牌：车牌中包括“使”或“领”字
     * 1. 大使馆：三位国家代码（数字）+三位车辆编号（数字）+使
     * 2. 领事馆：省份简称+地区代码+四位车辆编号（数字）+领（省份与地区代码可选范围包括：沪A、粤A、川A、云A、桂A、鄂A、闽D、鲁B、陕A、蒙A、蒙E、蒙H、藏A、黑A、辽A、渝A）
     * </p>
     *
     * <p>
     * 武警车牌：车牌开头包括WJ
     * 1. 武警总部车牌：WJ+•（中间点）+四个数字+数字或字母
     * 2. 武警地方车牌：WJ+省份简称+四位数字+数字或字母
     * 3. 省份范围同常规车牌号
     * 4. 其中字母包括（T D S H B X J）
     * </p>
     *
     * <p>
     * 军用车牌：字头+字头号 +序号组成。
     * 1. 字头：大写字母汉语拼音字母，字母包括（VKHBSLJNGCE）
     * 2. 字头号：大写英文字母，字母包括（A-D,J-P,R-T,V,Y）
     * 3. 序号：5位数字
     * </p>
     */
    public static final String PLATE = "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]" +
            "{1}(([A-HJ-Z]{1}[A-HJ-NP-Z0-9]{5})|([A-HJ-Z]{1}(([DF]{1}[A-HJ-NP-Z0-9]{1}[0-9]{4})|([0-9]{5}[DF]" +
            "{1})))|([A-HJ-Z]{1}[A-D0-9]{1}[0-9]{3}警)))|([0-9]{6}使)|((([沪粤川云桂鄂陕蒙藏黑辽渝]{1}A)|鲁B|闽D|蒙E|蒙H)[0-9]{4}领)" +
            "|(WJ[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼·•]{1}[0-9]{4}[TDSHBXJ0-9]{1})" +
            "|([VKHBSLJNGCE]{1}[A-DJ-PR-TVY]{1}[0-9]{5})";


    public static void main(String[] args) {
        System.out.println("123456".matches(PHONE));
    }
}
